package luogu.editor;

import java.util.Scanner;

public class D小红杀怪 {
    /*
     * 链接：https://ac.nowcoder.com/acm/contest/90960/D
     * 来源：牛客网
     * 
     * 小红在一个游戏里杀怪。这是个回合制游戏，小红和两只怪物相遇了。
     * 第一只怪物有
     * 𝑎
     * a 血量，第二只怪物有
     * 𝑏
     * b 血量。
     * 小红有两个技能：
     * 第一个技能叫火球术，效果是对单体怪物造成
     * 𝑥
     * x 伤害。
     * 第二个技能叫烈焰风暴，效果是对每只怪物造成
     * 𝑦
     * y 伤害。
     * 小红想知道，自己最少使用多少次技能，可以击杀这两只怪物？（当怪物血量小于等于0时，视为被击杀）
     */
}

/*
 * 利用枚举,对y进行枚举,然后找到最小次数.(注意限制y的次数)
 * a: ((a-n*y)+(x-1))/x 向上取整求次数
 * b: ((b-n*y)+(x-1))/x 向上取整求次数
 * 总次数: n+a次数+b次数
 */
class Main {
    static int res = Integer.MAX_VALUE;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        int x = sc.nextInt();
        int y = sc.nextInt();
        int maxNY = (Math.max(a, b) + (y - 1)) / y;
        for (int i = 0; i <= maxNY; i++) {
            int na = 0,nb = 0;
            if ((a - i * y) > 0) {
                na = ((a - i * y) + (x - 1)) / x;
            }
            if ((b - i * y) > 0){
                nb = ((b - i * y) + (x - 1)) / x;
            }
            res = Math.min(res, i+na+nb);
        }
        System.out.println(res);
    }
    // 递归实现
    private static void dfs(int a, int b, int x, int y, int count) {
        if (a <= 0 && b <= 0) {
            res = Math.min(res, count);
            return;
        }
        if (count >= res) {
            return; // 剪枝
        }

        // 使用火球术对怪物 A 进行攻击
        dfs(Math.max(0, a - x), b, x, y, count + 1);

        // 使用火球术对怪物 B 进行攻击
        dfs(a, Math.max(0, b - x), x, y, count + 1);

        // 使用烈焰风暴对两只怪物进行攻击
        dfs(Math.max(0, a - y), Math.max(0, b - y), x, y, count + 1);
    }
}
